package Z05Lambda.staticLambda;

import Z05Lambda.HelloLambda.Hero;
import Z05Lambda.HelloLambda.HeroChecker;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class Test78 {}

class TestLambda1{

        public static boolean testHero(Hero h){
                return h.hp >100 && h.damage < 50 ;
        }

        public static void main(String[] args) {

                Random r = new Random();
                List<Hero> heros = new ArrayList<Hero>();
                for (int i = 0; i < 5; i++) {
                        heros.add(new Hero("hero " + i, r.nextInt(1000), r.nextInt(100)));
                }
                System.out.println("初始化后的集合：");
                System.out.println(heros);

                System.out.println("使用匿名类的方式，筛选出 hp>100 && damange<50的英雄");

                Z05Lambda.HelloLambda.HeroChecker checker = new Z05Lambda.HelloLambda.HeroChecker() {
                        @Override
                        public boolean test(Hero h) {
                                // 使用Lambda方式筛选出数据
                                return (h.hp > 100 && h.damage < 50);
                        }
                };
                filter(heros ,checker);


                filter(heros ,h -> h.hp>100 && h.damage<50);
                //  在Lambda表达式中调用这个静态方法：
                filter(heros,h-> TestLambda1.testHero(h));
                //  调用静态方法还可以改写为：
                filter(heros,TestLambda1::testHero);
                //  以上被称为引用静态方法


                System.out.println("使用引用对象方法的过滤结果：");

                // 使用类的对象方法
                TestLambda1 Test1 = new TestLambda1();
                filter(heros ,TestLambda1::testHero);



        }

        private static void filter(List<Hero> heros, HeroChecker checker) {
                for (Hero hero : heros){
                        if (checker.test(hero)){
                                System.out.println(hero);
                        }
                }

        }
}
